#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>

int main()
{
    pid_t id = fork();
    if(id < 0)
    {
        perror("fork");
        exit(1);//表示进程运行完毕，结果不正确
    }
    else if(id == 0)
    {
        //子进程
        int cnt = 5;
        while(cnt)
        {
            printf("cnt:%d,我是子进程，pid:%d,ppid:%d\n",cnt,getpid(),getppid());
            sleep(1);
            cnt--;
        }
        exit(150);
    }
    else
    {
        printf("我是父进程，pid:%d,ppid:%d\n",getpid(),getppid());
       //pid_t ret = wait(NULL);//阻塞式的等待 
       int status = 0;
        pid_t ret = waitpid(id,&status,0);//阻塞式的等待 
        if(ret > 0)
        {
            printf("等待子进程成功,ret:%d,子进程收到的信号编号：%d,子进程退出码：%d\n",ret,status & 0x7F,(status>>8)&0xFF);//0xff --> 0000... 1111 1111
            //printf("等待子进程成功,ret:%d,子进程退出码：%d\n",ret,(status>>8)&0xFF);//0xff --> 0000... 1111 1111
            //printf("等待子进程成功,ret:%d,status：%d\n",ret,status);
        }

       //父进程
        //while(1)
        //{    
        //    printf("我是父进程，pid:%d,ppid:%d\n",getpid(),getppid());
        //    sleep(1);
        //}
    }
}


//int main()
//{
//    printf("hello world\n");
//    sleep(3);
//    _exit(13);
//}

//int main()
//{
//    printf("hello world\n");
//    sleep(1);
//    exit(13);
//
//}

//int sum(int top)
//{
//    int s = 0;
//    int i = 0;
//    for(i = 0 ; i < top; i++)
//    {
//        s += i;
//    }
//    _exit(222);
//}
//int main()
//{
//
//    printf("hello world1\n");
//    printf("hello world1\n");
//    printf("hello world1\n");
//
//    int res = sum(100);
//    _exit(111);
//
//    printf("hello world0\n");
//    printf("hello world2\n");
//    printf("hello world3\n");
   // printf("hello world1\n");
   // printf("hello world1\n");
   // printf("hello world1\n");
   // int* i = NULL;
   // *i = 123;
   // printf("hello world0\n");
   // printf("hello world2\n");
   // printf("hello world3\n");
   // return 0;
    //int number = 0;
    //for(number = 0; number < 150; ++number)
    //{
    //    printf("%d: %s\n",number,strerror(number));
    //}
    //return 0;
    //printf("我是父进程\n");

    //pid_t id = fork();
    //if(id < 0)
    //{
    //    printf("创建子进程失败\n");
    //    return 1;
    //}
    //else if(id == 0)
    //{
    //    //子进程
    //    while(1)
    //    {
    //        printf("我是子进程：pid:%d,ppid:%d\n",getpid(),getppid());
    //        sleep(1);
    //    }
    //}
    //else
    //{
    //    //父进程
    //    while(1)
    //    {
    //        printf("我是父进程：pid:%d,ppid:%d\n",getpid(),getppid());
    //        sleep(1);
    //    }
    //}
    //return 0;
//}
